package com.mymarkdown.app.interfaces;

import cn.hutool.core.io.watch.WatchMonitor;
import com.mymarkdown.app.fx.FxApplication;
import com.mymarkdown.app.model.UserLatelyInfo;
import org.springframework.context.ConfigurableApplicationContext;

import javax.websocket.Session;
import java.io.File;
import java.util.Optional;
import java.util.concurrent.BlockingQueue;

/**
 * @author zenglun
 * @date 2021/12/15 9:22 下午
 * @description: TODO
 */
public interface UserInfoService<T extends UserInfoService> {
    /**
     *  获取当前操作的文件
     * @Description:
     * @Author: zenglun
     * @return java.util.concurrent.BlockingQueue<java.io.File>
     */
    BlockingQueue<File> getOperationFile();

    /**
     * 获取当前操作md文件对应的HTML内容
     * @return
     */
    BlockingQueue<String> getOperationMdHTML();

    /**
     * 获取当前操作的pdf文件
     * @return
     */
    BlockingQueue<File> getOperationMdPdfFile();

    /**
     * 设置当前文件保存状态,false当前操作的文件未保存,true已经保存了当前操作的文件
     * @param state
     * @return
     */
    T setFileSaveState(boolean state);

    /**
     * 获取用户历史操作的文件新
     * @return
     */
    UserLatelyInfo getUserLatelyInfo();

    /**
     * 获取当前窗口用户的回话
     * @return
     */
    Session getSession();
    /**
     * 设置当前窗口用户的回话
     * @return
     */
    void setSession(Session session);


    /**
     * 获取当前SpringBoot容器对象
     * @return
     */
    default ConfigurableApplicationContext getSpringApplication() {
        return FxApplication.getSpringBootApplication();
    }

    /**
     * 获取当前工作目录
     * @return
     */
    File getWorkDir();

    /**
     * 设置当前工作目录
     * @param file
     * @return
     */
    T setWorkDir(File file);


}
